﻿

using System;
using System.Collections.Generic;

namespace StuertzDatenbank
{
    public class Teil
    {

        public int ProfilID;
        private int ID;


        private List<VerwendungPosition> VerwendungPosition;
        private List<Bearbeitungen> Bearbeitungen;
        private List<Beschichtungen> Beschichtungen;
        private List<Fuellmaterial> Fuellmaterial;
        private List<Dichtung> Dichtung;
        private List<Werkstoff> Werkstoff;
        private String Kommentar;
        private Benutzer ErstelltVon;
        private DateTime ErstelltWann;
        private Benutzer FreigabeVon;
        private DateTime FreigabeWann;
        private Status Status;
        private String Kundenbezeichnung;
        private Serie Kundenserie;
        private Kunde Kunde;
        private List<Restriktion> restrictionsliste;
        private DBF dbf;
        private Profil profil;
        private WW.Cad.Model.DxfModel Zeichnung;


        public Teil(int id, int profilid)
        {
            dbf = new DBF();


            ID = id;
            ProfilID = profilid;




            VerwendungPosition = new List<VerwendungPosition>();
            Bearbeitungen = new List<Bearbeitungen>();
            Beschichtungen = new List<Beschichtungen>();
            Fuellmaterial = new List<Fuellmaterial>();
            Dichtung = new List<Dichtung>();
            Werkstoff = new List<Werkstoff>();
            Kommentar = "";
            ErstelltVon = new Benutzer(-1);
            ErstelltWann = new DateTime(1753, 01, 1, 12, 00, 0);
            FreigabeVon = new Benutzer(-1);
            FreigabeWann = new DateTime(1753, 01, 1, 12, 00, 0);
            Status = new Status(-1);
            restrictionsliste = new List<Restriktion>();
            Zeichnung = new WW.Cad.Model.DxfModel();



        }

        public Teil(int p)
        {
            dbf = new DBF();


            ID = p;
            ProfilID = -1;




            VerwendungPosition = new List<VerwendungPosition>();
            Bearbeitungen = new List<Bearbeitungen>();
            Beschichtungen = new List<Beschichtungen>();
            Fuellmaterial = new List<Fuellmaterial>();
            Dichtung = new List<Dichtung>();
            Werkstoff = new List<Werkstoff>();
            Kommentar = "";
            ErstelltVon = new Benutzer(-1);
            ErstelltWann = new DateTime(1753, 01, 1, 12, 00, 0);
            FreigabeVon = new Benutzer(-1);
            FreigabeWann = new DateTime(1753, 01, 1, 12, 00, 0);
            Status = new Status(-1);
            restrictionsliste = new List<Restriktion>();
            Zeichnung = new WW.Cad.Model.DxfModel();
        }



        /// <summary>
        /// stellt die ID des Teils ein
        /// </summary>
        /// <param name="i"></param>///
        public void setID(int i)
        {
            if (i == -1)
            {
                Console.WriteLine("Error: ID muss noch festgelegt werden");
            }
            else
            {
                this.ID = i;
            }

        }

        /// <summary>
        /// gibt die ID des aktulen Teils wieder
        /// </summary>
        /// <returns></returns>
        public int getID()
        {
            return this.ID;
        }

        /// <summary>
        /// Gibt die ID des verwendenten Profils wieder
        /// </summary>
        /// <returns></returns>
        public int getIDProfil()
        {
            return ProfilID;
        }

        /// <summary>
        /// setzt die ID des verwendenten Profils wieder
        /// </summary>
        /// <returns></returns>
        public void setIDProfil(int i)
        {
            ProfilID = i;
        }


        /// <summary>
        /// gibt eine Liste mit allen Herstellern wieder 
        /// </summary>
        /// <returns></returns>
        public List<Hersteller> getAlleHerstellerProfil()
        {
            if (profil == null)
            {
                profil = dbf.ProfilAusgeben(ProfilID);
            }

            return profil.getAlleHersteller();

        }


        /// <summary>
        /// gibt die Serien des Profils als Liste Wieder
        /// </summary>
        /// <returns></returns>
        public List<Serie> getSerieProfil()
        {
            if (profil == null)
            {
                profil = dbf.ProfilAusgeben(ProfilID);
            }


            return this.profil.getSerie();
        }

        /// <summary>
        /// gibt die Bezeichnung des Proils wieder
        /// </summary>
        /// <returns></returns>
        public String getBezeichnungProfil()
        {
            if (profil == null)
            {
                profil = dbf.ProfilAusgeben(ProfilID);
            }


            return this.profil.getBezeichnung();
        }

        /// <summary>
        /// gibt die absolute Höhe des Profils als Decimal wieder, die einheit ist mm
        /// </summary>
        /// <returns></returns>
        public Decimal getHoeheAbsProfil()
        {
            if (profil == null)
            {
                profil = dbf.ProfilAusgeben(ProfilID);
            }


            return this.profil.getHoeheAbs();
        }


        /// <summary>
        /// gibt die absolute Tiefe des Profils als Decimal wieder, die Einheit ist mm
        /// </summary>
        /// <returns></returns>
        public Decimal getTiefeAbsProfil()
        {
            if (profil == null)
            {
                profil = dbf.ProfilAusgeben(ProfilID);
            }
            return this.profil.getTiefeAbs();
        }

        /// <summary>
        /// setzt die Verwendungspositon des Profil
        /// </summary>
        /// <param name="list"></param>
        public void setVerwendungposition(List<VerwendungPosition> list)
        {
            this.VerwendungPosition = list;
        }

        public List<VerwendungPosition> getVerwendungsposition()
        {
            return this.VerwendungPosition;

        }



        public List<VerwendungPosition> getVerwendungspositionProfil()
        {

            if (profil == null)
            {
                profil = dbf.ProfilAusgeben(ProfilID);
            }
            return this.profil.getVerwendungsposition();

        }

        /// <summary>
        /// gibt die Option ein auf Rahmen oder Fenster
        /// wobei ja-true= Rahmen
        ///       nein-false=Fenster
        /// </summary>
        /// <returns></returns>
        public bool getRahmenFensterProfil()
        {
            if (profil == null)
            {
                profil = dbf.ProfilAusgeben(ProfilID);
            }
            return this.profil.getRahmenFenster();
        }

        /// <summary>
        /// stellt die Bearbeitungen ein
        /// </summary>
        /// <param name="be"></param>
        public void setBearbeitungen(List<Bearbeitungen> be)
        {
            this.Bearbeitungen = be;
        }
        /// <summary>
        /// gibt die Bearbeitungen als Liste wider
        /// </summary>
        /// <returns></returns>
        public List<Bearbeitungen> getBearbeitungen()
        {
            return this.Bearbeitungen;
        }

        /// <summary>
        /// gibt die Bearbeitungen des Profil als Liste wider
        /// </summary>
        /// <returns></returns>
        public List<Bearbeitungen> getBearbeitungenProfil()
        {
            if (profil == null)
            {
                profil = dbf.ProfilAusgeben(ProfilID);
            }
            return this.profil.getBearbeitungen();
        }

        /// <summary>
        /// setzt die Beschichtungen
        /// </summary>
        /// <param name="be"></param>
        public void setBeschichtungen(List<Beschichtungen> be)
        {
            this.Beschichtungen = be;
        }
        /// <summary>
        /// gibt die Besichichtungen wieder, als Liste
        /// </summary>
        /// <returns></returns>
        public List<Beschichtungen> getBeschichtungen()
        {
            return this.Beschichtungen;
        }

        /// <summary>
        /// gibt die Besichichtungen des Profils wieder, als Liste
        /// </summary>
        /// <returns></returns>
        public List<Beschichtungen> getBeschichtungenProfil()
        {
            if (profil == null)
            {
                profil = dbf.ProfilAusgeben(ProfilID);
            }
            return this.profil.getBeschichtungen();
        }

        /// <summary>
        /// setzt die Fuellmaterialn
        /// </summary>
        /// <param name="be"></param>
        public void setFuellmaterial(List<Fuellmaterial> be)
        {
            this.Fuellmaterial = be;
        }
        /// <summary>
        /// gibt die Fuellmaterial wieder, als Liste
        /// </summary>
        /// <returns></returns>
        public List<Fuellmaterial> getFuellmaterial()
        {
            return this.Fuellmaterial;
        }

        /// <summary>
        /// gibt die Fuellmaterial des Profils wieder, als Liste
        /// </summary>
        /// <returns></returns>
        public List<Fuellmaterial> getFuellmaterialProfil()
        {
            if (profil == null)
            {
                profil = dbf.ProfilAusgeben(ProfilID);
            }
            return this.profil.getFuellmaterial();
        }

        /// <summary>
        /// setzt die Dichtung
        /// </summary>
        /// <param name="be"></param>
        public void setDichtung(List<Dichtung> be)
        {
            this.Dichtung = be;
        }
        /// <summary>
        /// gibt die Dichtung wieder, als Liste
        /// </summary>
        /// <returns></returns>
        public List<Dichtung> getDichtung()
        {
            return this.Dichtung;
        }

        /// <summary>
        /// gibt die Dichtung des Profils wieder, als Liste
        /// </summary>
        /// <returns></returns>
        public List<Dichtung> getDichtungProfil()
        {
            if (profil == null)
            {
                profil = dbf.ProfilAusgeben(ProfilID);
            }
            return this.profil.getDichtung();
        }

        /// <summary>
        /// setzt die Werkstoff
        /// </summary>
        /// <param name="be"></param>
        public void setWerkstoff(List<Werkstoff> be)
        {
            this.Werkstoff = be;
        }
        /// <summary>
        /// gibt die Werkstoff wieder, als Liste
        /// </summary>
        /// <returns></returns>
        public List<Werkstoff> getWerkstoff()
        {
            return this.Werkstoff;
        }

        /// <summary>
        /// gibt die Werkstoff des Profils wieder, als Liste
        /// </summary>
        /// <returns></returns>
        public List<Werkstoff> getWerkstoffProfil()
        {
            if (profil == null)
            {
                profil = dbf.ProfilAusgeben(ProfilID);
            }
            return this.profil.getWerkstoff();
        }


        /// <summary>
        /// setzt den Kommentar
        /// </summary>
        /// <param name="s"></param>
        public void setKommentar(String s)
        {
            this.Kommentar = s;
        }
        /// <summary>
        /// Gibt den Kommentar als String zurück
        /// </summary>
        /// <returns></returns>
        public String getKommentar()
        {
            return this.Kommentar;
        }

        /// <summary>
        /// Gibt den Profil-Kommentar als String zurück
        /// </summary>
        /// <returns></returns>
        public String getkommentarProfile()
        {

            if (profil == null)
            {
                profil = dbf.ProfilAusgeben(ProfilID);
            }
            return this.profil.getKommentar();
        }


        /// <summary>
        /// setzt ErstelltVon ein
        /// </summary>
        /// <param name="s"></param>
        public void setErstelltVon(Benutzer b)
        {
            this.ErstelltVon = b;
        }
        /// <summary>
        /// Gibt den ErstelltVon als String zurück
        /// </summary>
        /// <returns></returns>
        public Benutzer getErstelltVon()
        {
            return this.ErstelltVon;
        }

        /// <summary>
        /// setzt FreigabeVon ein
        /// </summary>
        /// <param name="s"></param>
        public void setFreigabeVon(Benutzer b)
        {
            this.FreigabeVon = b;
        }
        /// <summary>
        /// Gibt den FreigabeVon als String zurück
        /// </summary>
        /// <returns></returns>
        public Benutzer getFreigabeVon()
        {
            return this.FreigabeVon;
        }


        /// <summary>
        /// Setzt das Erstellungsdatum des Profils ein
        /// </summary>
        /// <param name="dt"></param>
        public void setErstelltWann(DateTime dt)
        {
            this.ErstelltWann = dt;
        }

        /// <summary>
        /// Gibt das Erstellungs Tatum und Zeit Wieder
        /// </summary>
        /// <returns></returns>
        public DateTime getErstelltWann()
        {
            return this.ErstelltWann;
        }
        /// <summary>
        /// Gibt das FreigabeWann Datum und Zeit Wieder
        /// </summary>
        /// <returns></returns>
        public DateTime getFreigabeWann()
        {
            return this.FreigabeWann;
        }

        /// <summary>
        /// Setzt das FreigabeWann des Profils ein
        /// </summary>
        /// <param name="dt"></param>
        public void setFreigabeWann(DateTime dt)
        {
            this.FreigabeWann = dt;
        }


        /// <summary>
        /// Gibt den Status wieder
        /// </summary>
        /// <returns></returns>
        public Status getStatus()
        {
            return this.Status;
        }

        /// <summary>
        /// Setzt den Satus ein
        /// </summary>
        /// <param name="dt"></param>
        public void setStatus(Status status)
        {
            this.Status = status;
        }


        



        /// <summary>
        /// Gibt den ErstelltVon des Profils zurück
        /// </summary>
        /// <returns></returns>
        public Benutzer getErstelltVonProfil()
        {
            if (profil == null)
            {
                profil = dbf.ProfilAusgeben(ProfilID);
            }
            return this.profil.getErstelltVon();
        }

        /// <summary>
        /// Gibt den FreigabeVon als Benutzer zurück
        /// </summary>
        /// <returns></returns>
        public Benutzer getFreigabeVonProfile()
        {
            if (profil == null)
            {
                profil = dbf.ProfilAusgeben(ProfilID);
            }
            return this.profil.getFreigabeVon();
        }




        /// <summary>
        /// Gibt das Erstellungs Datum und Zeit Wieder des Profils
        /// </summary>
        /// <returns></returns>
        public DateTime getErstelltWannProfil()
        {
            if (profil == null)
            {
                profil = dbf.ProfilAusgeben(ProfilID);
            }
            return this.profil.getErstelltWann();
        }
        /// <summary>
        /// Gibt das FreigabeWann Datum und Zeit des Profils Wieder
        /// </summary>
        /// <returns></returns>
        public DateTime getFreigabeWannProfil()
        {
            if (profil == null)
            {
                profil = dbf.ProfilAusgeben(ProfilID);
            }
            return this.profil.getFreigabeWann();
        }


        /// <summary>
        /// Gibt den Status des Profils wieder
        /// </summary>
        /// <returns></returns>
        public Status getStatusProfil()
        {
            if (profil == null)
            {
                profil = dbf.ProfilAusgeben(ProfilID);
            }
            return this.profil.getStatus();
        }



       


        /// <summary>
        /// gibt die Restriktion wieder, als Liste
        /// </summary>
        /// <returns></returns>
        public List<Restriktion> getRestriktionProfil()
        {
            if (profil == null)
            {
                profil = dbf.ProfilAusgeben(ProfilID);
            }
            return this.profil.getRestriktion();
        }




        


        public String getKundenbezeichnung()
        {
            return this.Kundenbezeichnung;
        }
        public void setKundenbezeichnung(String kundenbezeichnung)
        {
            this.Kundenbezeichnung = kundenbezeichnung;
        }

        public Serie getKundenserie()
        {
            return this.Kundenserie;
        }

        public void setKundenserie(Serie serie)
        {
            this.Kundenserie = serie;
        }

        public Kunde getkunde()
        {
            return this.Kunde;
        }

        public void setKunde(Kunde kunde)
        {
            this.Kunde = kunde;
        }

        /// <summary>
        /// setzt die Restriktionsliste
        /// </summary>
        /// <param name="s"></param>
        public void setRestriktionen(List<Restriktion> s)
        {
            this.restrictionsliste = s;
        }
        /// <summary>
        /// Gibt den restruktion als String zurück
        /// </summary>
        /// <returns></returns>
        public List<Restriktion> getRestriktionen()
        {
            return this.restrictionsliste;
        }

        /// <summary>
        /// Vervolständigt 
        /// </summary>
        public void repair()
        {
            //this=dbf.teil (this)

        }

        /// <summary>
        /// setz die Zeichnung
        /// </summary>
        /// <param name="model"></param>
        public void setZeichnung(WW.Cad.Model.DxfModel model)
        { this.Zeichnung = model;
        }
       
        /// <summary>
        /// gibt die Zeichnung Wieder
        /// </summary>
        /// <returns></returns>
        public WW.Cad.Model.DxfModel getZeichnung()
        { return this.Zeichnung;
        }


      

        /// <summary>
        /// Setz das profil des teils
        /// </summary>
        /// <param name="profil"></param>
        public void setProfil(Profil profil)
        {
            this.profil = profil;
        }

    }
        
}
